當我們的應用程式在 Docker 容器中運行時,如果遇到問題,該如何快速排查?今天將介紹幾個 Docker 內建的指令,它們是我們在問題排查時不可或缺的好幫手。
docker ps
:查看容器狀態這是最基本也最常用的指令,用於列出目前正在運行的容器。
docker ps
加上 -a
參數可以看到所有容器,包含已經停止的:
docker ps -a
從輸出結果中,我們可以快速掌握容器的 ID、使用的映像檔、運行狀態、以及對應的連接埠等關鍵資訊。
docker logs
:檢視容器日誌應用程式的日誌是排查問題最重要的線索。docker logs
可以幫助我們查看容器內應用程式的標準輸出。
# 顯示指定容器的所有日誌
docker logs <container_id_or_name>
# 持續追蹤新產生的日誌 (-f, --follow)
docker logs -f <container_id_or_name>
# 搭配 grep 過濾關鍵字,並將結果存檔
docker logs <container_id_or_name> | grep "ERROR" > error_logs.txt
docker inspect
:取得容器詳細資訊如果需要更深入的資訊,例如容器的 IP 位址、網路設定、掛載的儲存空間等,docker inspect
會是你的好幫手。
# 取得容器所有詳細資訊 (JSON 格式)
docker inspect <container_id_or_name>
# 取得容器 IP 位址
CONTAINER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id_or_name>)
echo $CONTAINER_IP
# 直接用 curl 測試容器內的服務
curl http://$CONTAINER_IP:<port>
docker exec
:進入容器內部互動有時候,我們需要直接進入容器內部環境進行檢查,例如查看檔案、測試網路連線等。docker exec
可以讓我們在一個運行中的容器內執行指令。
# 進入容器的互動式 shell 環境
docker exec -it <container_id_or_name> /bin/bash
# 如果 /bin/bash 不存在,可以嘗試 /bin/sh
-i
(--interactive
): 保持標準輸入開啟。-t
(--tty
): 分配一個虛擬終端機。docker exec
執行的是一個新的程序,並不會影響到 Dockerfile 中由 CMD
或 ENTRYPOINT
啟動的主程序,因此非常適合用來進行線上偵錯。
今天介紹的 ps
, logs
, inspect
, exec
是 Docker 問題排查的四大法寶。熟悉它們的用法,將能幫助我們在遇到問題時,更從容地定位並解決問題。